{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/evento-construtor-heranca/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Evento, Construtor e Herança\",\n  \"description\": \"Nesse artigo iremos abordar sobre como emitir eventos, declarar construtores e definir heranças no seu contrato inteligente. Falaremos sobre `emit`, `constructor` e `herança`.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Iniciante\", \"Intermediário\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"18/05/2022\",\n  \"modifiedAt\": \"20220518\",\n  \"suburl\": \"evento-construtor-heranca/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos abordar sobre como emitir eventos, declarar construtores e definir heran\\xE7as no seu contrato inteligente.\\nFalaremos sobre \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"emit\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"constructor\"), \" e \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"heran\\xE7a\"), \".\"), mdx(\"h2\", {\n    \"id\": \"event-evento\"\n  }, \"Event (Evento)\"), mdx(\"p\", null, \"Os eventos permitem realizar registros na blockchain Ethereum.\"), mdx(\"p\", null, \"Alguns casos de uso para eventos s\\xE3o:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ouvindo eventos e atualizando a interface do usu\\xE1rio\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Uma forma mais barata para o armazenamento de dados\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract Event {\\n    // Declara\\xE7\\xE3o do evento\\n    // At\\xE9 3 par\\xE2metros podem ser indexados\\n    // Os par\\xE2metros indexados ajudam a filtrar os logs pelo par\\xE2metro indexado\\n    event Log(address indexed sender, string message);\\n    event AnotherLog();\\n\\n    function test() public {\\n        emit Log(msg.sender, \\\"Ol\\xE1 Mundo!\\\");\\n        emit Log(msg.sender, \\\"Ol\\xE1 comunidade Solidity!\\\");\\n        emit AnotherLog();\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"constructor-construtor\"\n  }, \"Constructor (Construtor)\"), mdx(\"p\", null, \"Um \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"constructor\"), \" \\xE9 uma fun\\xE7\\xE3o opcional que \\xE9 executada na cria\\xE7\\xE3o do contrato.\"), mdx(\"p\", null, \"Aqui est\\xE3o alguns exemplos de como passar argumentos para os construtores\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\n// Contrato X\\ncontract X {\\n    string public name;\\n\\n    constructor(string memory _name) {\\n        name = _name;\\n    }\\n}\\n\\n// Contrato Y\\ncontract Y {\\n    string public text;\\n\\n    constructor(string memory _text) {\\n        text = _text;\\n    }\\n}\\n\\n// Existem 2 maneiras de inicializar o contrato pai com par\\xE2metros.\\n\\n// Passe os par\\xE2metros aqui na lista de heran\\xE7a.\\ncontract B is X(\\\"Input to X\\\"), Y(\\\"Input to Y\\\") {\\n\\n}\\n\\ncontract C is X, Y {\\n    // Passe os par\\xE2metros aqui no construtor,\\n    // semelhante aos modificadores de fun\\xE7\\xE3o.\\n    constructor(string memory _name, string memory _text) X(_name) Y(_text) {}\\n}\\n\\n// Os construtores pai s\\xE3o sempre chamados na ordem de heran\\xE7a,\\n// independentemente da ordem dos contratos pai listados\\n// no construtor do contrato filho.\\n\\n// Ordem de chamada dos construtores:\\n// 1. X\\n// 2. Y\\n// 3. D\\ncontract D is X, Y {\\n    constructor() X(\\\"X foi chamada\\\") Y(\\\"Y foi chamada\\\") {}\\n}\\n\\n// Ordem de chamada dos construtores:\\n// 1. X\\n// 2. Y\\n// 3. E\\ncontract E is X, Y {\\n    constructor() Y(\\\"Y foi chamada\\\") X(\\\"X foi chamada\\\") {}\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"inheritance-herança\"\n  }, \"Inheritance (Heran\\xE7a)\"), mdx(\"p\", null, \"No Solidity podemos definir m\\xFAltiplas heran\\xE7as. Os contratos podem herdar outro contrato usando a palavra-chave \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"is\"), \".\"), mdx(\"p\", null, \"A fun\\xE7\\xE3o que ser\\xE1 substitu\\xEDda por um contrato filho deve ser declarada como \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"virtual\"), \".\"), mdx(\"p\", null, \"A fun\\xE7\\xE3o que ir\\xE1 substituir uma fun\\xE7\\xE3o pai deve usar a palavra-chave \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"override\"), \".\"), mdx(\"p\", null, \"A ordem de heran\\xE7a \\xE9 importante.\"), mdx(\"p\", null, \"Voc\\xEA deve listar os contratos-pai na ordem de \\u201Cmais b\\xE1sicos\\u201D para \\u201Cmais derivados\\u201D.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\n/* Gr\\xE1fico de heran\\xE7a\\n    A\\n   / \\\\\\n  B   C\\n / \\\\ /\\nF  D,E\\n\\n*/\\n\\ncontract A {\\n    function foo() public pure virtual returns (string memory) {\\n        return \\\"A\\\";\\n    }\\n}\\n\\n// Os contratos herdam outros contratos usando a palavra-chave 'is'.\\ncontract B is A {\\n    // Sobrepor A.foo()\\n    function foo() public pure virtual override returns (string memory) {\\n        return \\\"B\\\";\\n    }\\n}\\n\\ncontract C is A {\\n    // Sobrepor A.foo()\\n    function foo() public pure virtual override returns (string memory) {\\n        return \\\"C\\\";\\n    }\\n}\\n\\n// Os contratos podem herdar de v\\xE1rios contratos pai.\\n// Quando \\xE9 chamada uma fun\\xE7\\xE3o que \\xE9 definida v\\xE1rias \\n// vezes em contratos diferentes, os contratos pai s\\xE3o \\n// pesquisados da direita para a esquerda e em profundidade.\\n\\ncontract D is B, C {\\n    // D.foo() retorna \\\"C\\\"\\n    // j\\xE1 que C \\xE9 o contrato pai mais \\xE0 direita com fun\\xE7\\xE3o foo()\\n    function foo() public pure override(B, C) returns (string memory) {\\n        return super.foo();\\n    }\\n}\\n\\ncontract E is C, B {\\n    // E.foo() retorna \\\"B\\\"\\n    // j\\xE1 que B \\xE9 o contrato pai mais \\xE0 direita com fun\\xE7\\xE3o foo()\\n    function foo() public pure override(C, B) returns (string memory) {\\n        return super.foo();\\n    }\\n}\\n\\n// A heran\\xE7a deve ser ordenada de \\u201Cmais b\\xE1sica\\u201D para \\u201Cmais derivada\\u201D.\\n// Trocar a ordem de A e B gerar\\xE1 um erro de compila\\xE7\\xE3o.\\ncontract F is A, B {\\n    function foo() public pure override(A, B) returns (string memory) {\\n        return super.foo();\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"chamando-um-contrato-pai-herdado\"\n  }, \"Chamando um Contrato Pai Herdado\"), mdx(\"p\", null, \"Os contratos pai podem ser chamados diretamente ou usando a palavra-chave \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"super\"), \".\"), mdx(\"p\", null, \"Vamos aprender como substituir corretamente as vari\\xE1veis de estado herdadas.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\n/* \\xC1rvore de Heran\\xE7a\\n   A\\n /   \\\\\\nB     C\\n \\\\   /\\n   D\\n*/\\n\\ncontract A {\\n    // Isso \\xE9 chamado de evento. Voc\\xEA pode emitir eventos \\n    // de sua fun\\xE7\\xE3o e eles ser\\xE3o registrados no log de transa\\xE7\\xF5es.\\n    // No nosso caso, isso ser\\xE1 \\xFAtil para rastrear chamadas de fun\\xE7\\xE3o.\\n    event Log(string message);\\n\\n    function foo() public virtual {\\n        emit Log(\\\"A.foo chamada\\\");\\n    }\\n\\n    function bar() public virtual {\\n        emit Log(\\\"A.bar chamada\\\");\\n    }\\n}\\n\\ncontract B is A {\\n    function foo() public virtual override {\\n        emit Log(\\\"B.foo chamada\\\");\\n        A.foo();\\n    }\\n\\n    function bar() public virtual override {\\n        emit Log(\\\"B.bar chamada\\\");\\n        super.bar();\\n    }\\n}\\n\\ncontract C is A {\\n    function foo() public virtual override {\\n        emit Log(\\\"C.foo chamada\\\");\\n        A.foo();\\n    }\\n\\n    function bar() public virtual override {\\n        emit Log(\\\"C.bar chamada\\\");\\n        super.bar();\\n    }\\n}\\n\\ncontract D is B, C {\\n    // Tente:\\n    // - Chame D.foo e verifique os logs de transa\\xE7\\xF5es.\\n    // Embora D herde A, B e C, s\\xF3 chamou C e depois A.\\n    // - Chame D.bar e verifique os logs de transa\\xE7\\xF5es\\n    // D chamou C, depois B e finalmente A.\\n    // Embora 'super' tenha sido chamado duas vezes \\n    // (por B e C), ele chamou A apenas uma vez.\\n\\n    function foo() public override(B, C) {\\n        super.foo();\\n    }\\n\\n    function bar() public override(B, C) {\\n        super.bar();\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"sombreando-variáveis-de-estado-herdadas\"\n  }, \"Sombreando vari\\xE1veis de estado herdadas\"), mdx(\"p\", null, \"Ao contr\\xE1rio das fun\\xE7\\xF5es, as vari\\xE1veis de estado n\\xE3o podem ser substitu\\xEDdas pela declara\\xE7\\xE3o novamente no contrato filho.\"), mdx(\"p\", null, \"Vamos aprender como substituir corretamente as vari\\xE1veis de estado herdadas.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract A {\\n    string public name = \\\"Contract A\\\";\\n\\n    function getName() public view returns (string memory) {\\n        return name;\\n    }\\n}\\n\\n// O sombreamento n\\xE3o \\xE9 permitido em Solidity 0.6\\n// Isso n\\xE3o vai compilar\\n// contract B is A {\\n//     string public name = \\\"Contract B\\\";\\n// }\\n\\ncontract C is A {\\n    // Essa \\xE9 a maneira correta de substituir vari\\xE1veis de estado herdadas.\\n    constructor() {\\n        name = \\\"Contract C\\\";\\n    }\\n\\n    // C.getName retorna \\\"Contract C\\\"\\n}\\n\")), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Evento, Construtor e Herança","description":"Nesse artigo iremos abordar sobre como emitir eventos, declarar construtores e definir heranças no seu contrato inteligente. Falaremos sobre `emit`, `constructor` e `herança`.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAQP/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAGyjtgwwf/EABkQAAMBAQEAAAAAAAAAAAAAAAECERIABP/aAAgBAQABBQJTPQ+wq3ORRSe//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBAAAgICAwAAAAAAAAAAAAAAAREAAjFRAxAS/9oACAEBAAY/AiDyE2s0NQkOx1A8z0E5nr//xAAcEAACAgIDAAAAAAAAAAAAAAABEQAhEDFBUdH/2gAIAQEAAT8hYSCOghJkcKcIiCksQugDurheBj//2gAMAwEAAgADAAAAELDP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHRABAQACAgMBAAAAAAAAAAAAAREAIWGBMUFx0f/aAAgBAQABPxAbvgac0J6fznHzNpNdnGIMFJR61gmqIzo++caCAl1iTTvnP//Z","aspectRatio":1.5151515151515151,"src":"/static/0333408d42b5592912022b3f7c2d7b4b/0cb3d/capa.jpg","srcSet":"/static/0333408d42b5592912022b3f7c2d7b4b/f836f/capa.jpg 200w,\n/static/0333408d42b5592912022b3f7c2d7b4b/2244e/capa.jpg 400w,\n/static/0333408d42b5592912022b3f7c2d7b4b/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Iniciante","Intermediário"],"author":["Matheus"],"suburl":"evento-construtor-heranca/","publishedAt":"18/05/2022","modifiedAt":"20220518"},"tableOfContents":{"items":[{"url":"#event-evento","title":"Event (Evento)"},{"url":"#constructor-construtor","title":"Constructor (Construtor)"},{"url":"#inheritance-herança","title":"Inheritance (Herança)"},{"url":"#chamando-um-contrato-pai-herdado","title":"Chamando um Contrato Pai Herdado"},{"url":"#sombreando-variáveis-de-estado-herdadas","title":"Sombreando variáveis de estado herdadas","items":[{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"evento-construtor-heranca/","postTopics":["Iniciante","Intermediário"],"publishedAt":"18/05/2022","prevArticle":{"title":"Tratamento de erros de condições e exceções","layout":"BlogPage","suburl":"tratamento-de-erros/","author":["Matheus"],"tags":["Iniciante","Intermediário"],"publishedAt":"17/05/2022","modifiedAt":"20220517"},"nextArticle":{"title":"Visibilidade, Interfaces e Funções Pagáveis","layout":"BlogPage","suburl":"visibilidade-interface-pagavel/","author":["Matheus"],"tags":["Intermediário"],"publishedAt":"20/05/2022","modifiedAt":"20220520"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}